{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "# Pandas 透视表 - pivot_table()\n",
        "\n",
        "本教程详细介绍如何使用 `pivot_table()` 创建数据透视表。\n",
        "\n",
        "## 目录\n",
        "1. pivot_table() 基础用法\n",
        "2. 简单的透视表\n",
        "3. 多级索引透视表\n",
        "4. 聚合函数\n",
        "5. 填充值和缺失值\n",
        "6. 综合应用\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 导入库\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "import pandas as pd\n",
        "import numpy as np\n",
        "import warnings\n",
        "warnings.filterwarnings('ignore')\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 1. pivot_table() 基础用法\n",
        "\n",
        "### 方法说明\n",
        "\n",
        "`pivot_table()` 用于创建数据透视表，类似于Excel的数据透视表功能。\n",
        "\n",
        "**语法:**\n",
        "```python\n",
        "df.pivot_table(values=None, index=None, columns=None, \n",
        "               aggfunc='mean', fill_value=None, margins=False, ...)\n",
        "```\n",
        "\n",
        "**主要参数:**\n",
        "- `values`: 要聚合的列\n",
        "- `index`: 行索引（分组键）\n",
        "- `columns`: 列索引（分组键）\n",
        "- `aggfunc`: 聚合函数，默认 'mean'\n",
        "- `fill_value`: 填充缺失值的值\n",
        "- `margins`: 是否添加总计行/列，默认 False\n",
        "\n",
        "**特点:**\n",
        "- ✅ 类似于Excel的数据透视表\n",
        "- ✅ 支持多级索引\n",
        "- ✅ 可以应用多种聚合函数\n",
        "- ✅ 自动处理缺失值\n",
        "\n",
        "**适用场景:** 数据汇总、交叉分析、多维度统计\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "### 示例1: 创建示例数据\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "df = pd.DataFrame({\n",
        "    '部门': ['技术', '销售', '人事', '技术', '销售', '人事', '技术', '销售'],\n",
        "    '性别': ['男', '女', '男', '女', '男', '女', '男', '女'],\n",
        "    '工资': [8000, 7500, 7000, 8500, 7800, 7200, 8200, 7600],\n",
        "    '奖金': [2000, 1800, 1500, 2100, 1900, 1600, 2050, 1850]\n",
        "})\n",
        "\n",
        "print(\"原始数据:\")\n",
        "print(df)\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 2. 简单的透视表\n",
        "\n",
        "### 示例2: 基础透视表\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "# 按部门分组，计算平均工资\n",
        "print(\"各部门平均工资透视表:\")\n",
        "print(pd.pivot_table(df, values='工资', index='部门', aggfunc='mean'))\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 3. 多级索引透视表\n",
        "\n",
        "### 示例3: 行列交叉透视表\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "# 按部门和性别交叉分析平均工资\n",
        "print(\"部门×性别 平均工资透视表:\")\n",
        "print(pd.pivot_table(df, values='工资', index='部门', columns='性别', aggfunc='mean'))\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 4. 聚合函数\n",
        "\n",
        "### 示例4: 多个聚合函数\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "# 使用多个聚合函数\n",
        "print(\"各部门工资多个统计指标:\")\n",
        "print(pd.pivot_table(df, values='工资', index='部门', \n",
        "                     aggfunc=['mean', 'sum', 'count', 'max', 'min']))\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 5. 填充值和总计\n",
        "\n",
        "### 示例5: 添加总计和填充值\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "# 添加总计行/列和填充缺失值\n",
        "print(\"添加总计 (margins=True):\")\n",
        "print(pd.pivot_table(df, values='工资', index='部门', columns='性别', \n",
        "                     aggfunc='mean', margins=True, fill_value=0))\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 总结\n",
        "\n",
        "**透视表方法总结:**\n",
        "1. ✅ **pivot_table()**: 创建数据透视表\n",
        "2. ✅ **values**: 要聚合的列\n",
        "3. ✅ **index**: 行索引（分组键）\n",
        "4. ✅ **columns**: 列索引（分组键）\n",
        "5. ✅ **aggfunc**: 聚合函数（默认mean）\n",
        "6. ✅ **margins**: 添加总计行/列\n",
        "7. ✅ **fill_value**: 填充缺失值\n",
        "\n",
        "**最佳实践:**\n",
        "- 使用 `pivot_table()` 创建类似Excel的数据透视表\n",
        "- 通过 `index` 和 `columns` 创建交叉分析\n",
        "- 使用 `aggfunc` 指定聚合函数\n",
        "- 使用 `margins=True` 添加总计\n",
        "- 使用 `fill_value` 填充缺失值\n",
        "- 适用于多维度数据汇总和分析\n"
      ]
    }
  ],
  "metadata": {
    "language_info": {
      "name": "python"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 2
}
